﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
//using System.Linq;
using System.Text;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Collections;
using System.Globalization;
using System.Threading;
using Modele;

namespace vue
{
    public partial class Form1 : Form
    {

        /***************/
        /** attributs **/
        /***************/
        
        //lien vers la VUE
        private Vue vue;

        //Calques        
        private int nbre_Calque;
        private List<CheckBox> checkBox_calques;
        private List<Label> label_calques;
        //private int calque_courant;


        //Outils
        private String mode;
        private String outils;

        //brush
        private System.Drawing.Color couleur;
        private int epaisseur;
        private byte transparence;

        //Informations sur l'action d'écriture
        private bool cursorDown;
        System.Threading.Thread threadStroke;

        /*Globalisation*/
        private System.Resources.ResourceManager RM = null;
        // Liste des CultureInfo
        private CultureInfo EnglishCulture = new CultureInfo("en");
        private CultureInfo FrenchCulture = new CultureInfo("fr");

        
        //BALISES 
        private List<System.Drawing.Bitmap> images_balises;
        private List<Modele.Balise> balises;
        private int indexe_balise;

        //Recherche
        private List<System.Drawing.Point> resultat_recherche; //liste de positions (System.Drawing.Point)
        int indice_resultat_recherche; //permet de parcourir les resultats d'une recherche;
        /*Undo-Redo*/
        private int nbRedo;
        private int nbUndo;

        //gestion de l'utilisateur
        private string nom = "";
        private string prenom = "";

        private float zoom;
        private Image image;
        private System.Drawing.Point centre_image;

       

        /***************/
        /**  méthodes **/
        /***************/

        //constructeur
        public Form1(Vue _vue)
        {
            InitializeComponent();
            this.francaisToolStripMenuItem.Checked = true;
            this.buttonDeplacer.Visible = false;
            vue = _vue;
            hScrollBar1.ValueChanged += new EventHandler(hScrollBar1_ValueChanged);
            vScrollBar1.ValueChanged += new EventHandler(vScrollBar1_ValueChanged);
            hScrollBar1.SizeChanged += new EventHandler(hScrollBar1_SizeChanged);
            vScrollBar1.SizeChanged += new EventHandler(vScrollBar1_SizeChanged);
            this.SizeChanged += new EventHandler(Form1_SizeChanged);
            zoom = 1.0F;
            mode = "dessin";
            outils = "crayon";
            couleur = System.Drawing.Color.Black;
            epaisseur = 50;
            transparence = 0;

            //recherche
            indice_resultat_recherche = 0;
            resultat_recherche = new List<System.Drawing.Point>();


            // Définition de la culture par défaut
            System.Threading.Thread.CurrentThread.CurrentUICulture = FrenchCulture;
            //System.Threading.Thread.CurrentThread.CurrentUICulture = EnglishCulture;
            // LeResourceManager prend en paramètre : nom_du_namespace.nom_de_la_ressource_principale
            RM = new System.Resources.ResourceManager("vue.Form1", typeof(Form1).Assembly);

            // Affecte la valeur de la ressource MainTitle à la proriété Text de la fenêtre principale
            //this.Text = RM.GetString("MainTitle");

            AfficherTexte();

            cursorDown = false;
            //inkPicture1.CursorDown += new Microsoft.Ink.InkCollectorCursorDownEventHandler(inkPicture1_CursorDown);
            inkPicture1.CursorDown += new Microsoft.Ink.InkCollectorCursorDownEventHandler(inkPicture1_CursorDown);
            inkPicture1.Click += new EventHandler(inkPicture1_Click);
         
            nbRedo = 0;
            nbUndo = 0;

            //BALISE
            images_balises=new  List<System.Drawing.Bitmap>();
            balises=new  List<Modele.Balise>();
            //chargement de la balises par defaut;
            images_balises.Add(global::projet_PAN.Properties.Resources.balise_attention);

            Modele.Semantique sem= new Semantique("balise par defaut",prenom,nom);
            balises.Add(new Modele.Balise(sem, global::projet_PAN.Properties.Resources.balise_attention));  
            indexe_balise=0;

            //gestion des checkBox
            nbre_Calque = 0;
            checkBox_calques = new List<CheckBox>();
            label_calques = new List<Label>();
            maj_checkBox(); //gestion de l'affichage des checkBox

        }

        void Form1_SizeChanged(object sender, EventArgs e)
        {
            inkPicture1.Top = 0;
            inkPicture1.Left = 0;
            updateScroll();
        }

        /***********************
         *  Getters & Setters  *
         ***********************/

        /**
        * setUtilisateur(String _nom)
        * 
        * @brief met à jour le labelUtilisateur
        * @param String _prenom : le nouveau prénom
        * @param String _nom : le nouveau nom
        * @return void
        */
        public void setUtilisateur(string _prenom, string _nom)
        {
            prenom = _prenom;
            nom = _nom;
            labelUtilisateur.Text = _prenom + " " + _nom;
        }

        public void setModeName()
        {
            toolStripStatusLabelMode.Text = "Mode " + mode+ " : "+outils;
        }

      
        /*
         * AfficherTexte(): permet de mettre à jour les chaines de caractères 
         * lors d'un changement de langue (localisation)
         */
        
        private void AfficherTexte()
        {
            this.commentFaireToolStripMenuItem.Text = RM.GetString("commentFaireToolStripMenuItem.Text");
            this.aProposToolStripMenuItem.Text = RM.GetString("aProposToolStripMenuItem.Text");
            this.optionsUtilisateurToolStripMenuItem.Text = RM.GetString("optionsUtilisateurToolStripMenuItem.Text");
            this.rafraichissementToolStripMenuItem.Text = RM.GetString("rafraichissementToolStripMenuItem.Text");
            this.ajouterNouveauCalqueToolStripMenuItem.Text = RM.GetString("ajouterNouveauCalqueToolStripMenuItem.Text");
            this.importerUnEnsembleDiconesToolStripMenuItem.Text = RM.GetString("importerUnEnsembleDiconesToolStripMenuItem.Text");
            this.editerToolStripMenuItem.Text = RM.GetString("editerToolStripMenuItem.Text");
           this.fichierToolStripMenuItem.Text = RM.GetString("fichierToolStripMenuItem.Text");
           this.nouveauProjetToolStripMenuItem.Text = RM.GetString("nouveauProjetToolStripMenuItem.Text");
           this.ouvrirToolStripMenuItem.Text = RM.GetString("ouvrirToolStripMenuItem.Text");
           this.enregistrerToolStripMenuItem.Text = RM.GetString("enregistrerToolStripMenuItem.Text");
           this.enregisteToolStripMenuItem.Text = RM.GetString("enregisteToolStripMenuItem.Text");
           this.importerToolStripMenuItem.Text = RM.GetString("importerToolStripMenuItem.Text");
           this.exporterToolStripMenuItem.Text = RM.GetString("exporterToolStripMenuItem.Text");
           this.imprimerToolStripMenuItem.Text = RM.GetString("imprimerToolStripMenuItem.Text");
           this.quitterToolStripMenuItem.Text = RM.GetString("quitterToolStripMenuItem.Text");
           this.editionToolStripMenuItem.Text = RM.GetString("editionToolStripMenuItem.Text");
           this.annulerToolStripMenuItem.Text = RM.GetString("annulerToolStripMenuItem.Text");
           this.rétablirToolStripMenuItem.Text = RM.GetString("rétablirToolStripMenuItem.Text");
           this.couperToolStripMenuItem.Text = RM.GetString("couperToolStripMenuItem.Text");
           this.copierToolStripMenuItem.Text = RM.GetString("copierToolStripMenuItem.Text");
           this.collerToolStripMenuItem.Text = RM.GetString("collerToolStripMenuItem.Text");
           this.supprimerToolStripMenuItem.Text = RM.GetString("supprimerToolStripMenuItem.Text");
           this.clearToolStripMenuItem.Text = RM.GetString("clearToolStripMenuItem.Text");
           this.supprimerBaliseToolStripMenuItem.Text = RM.GetString("supprimerBaliseToolStripMenuItem.Text");
           this.supprimerEncreToolStripMenuItem.Text = RM.GetString("supprimerEncreToolStripMenuItem.Text");
           this.supprimerTexteToolStripMenuItem.Text = RM.GetString("supprimerTexteToolStripMenuItem.Text");
           this.supprimerToolStripMenuItem1.Text = RM.GetString("supprimerToolStripMenuItem1.Text");
           this.toutSupprimerToolStripMenuItem.Text=RM.GetString("toutSupprimerToolStripMenuItem.Text");
           this.affichageToolStripMenuItem.Text = RM.GetString("affichageToolStripMenuItem.Text");
           this.projetToolStripMenuItem.Text = RM.GetString("projetToolStripMenuItem.Text");
           this.langueToolStripMenuItem.Text = RM.GetString("langueToolStripMenuItem.Text");
           this.francaisToolStripMenuItem.Text = RM.GetString("francaisToolStripMenuItem.Text");
           this.anglaisToolStripMenuItem.Text = RM.GetString("anglaisToolStripMenuItem.Text");
           this.blocnoteToolStripMenuItem.Text = RM.GetString("blocnoteToolStripMenuItem.Text");
           this.bibliothèqueToolStripMenuItem.Text = RM.GetString("bibliothèqueToolStripMenuItem.Text");
           this.importerUnEnsembleDiconesToolStripMenuItem.Text = RM.GetString("importerUnEnsembleDiconesToolStripMenuItem.Text");
           this.rechercheCC.Text = RM.GetString("rechercheCC.Text");
           this.tabManipulation.Text = RM.GetString("tabManipulation.Text");
           this.tabFormes.Text = RM.GetString("tabFormes.Text");
           this.tabDessin.Text = RM.GetString("tabDessin.Text");
           this.tabBalises.Text = RM.GetString("tabBalises.Text");
           this.tabEdition.Text = RM.GetString("tabEdition.Text");
           this.label_semantique.Text = RM.GetString("label_semantique.Text");
           this.label0.Text = RM.GetString("label0.Text");
           this.label1.Text = RM.GetString("label1.Text");
           this.label2.Text = RM.GetString("label2.Text");
           this.labelKeyWord.Text = RM.GetString("label3.Text");
           this.label4.Text = RM.GetString("label4.Text");
           this.label5.Text = RM.GetString("label5.Text");
           this.labelColor.Text = RM.GetString("labelColor.Text");
           this.labelOpacite.Text = RM.GetString("labelOpacite.Text");
           this.labelUtilisateur.Text = RM.GetString("labelUtilisateur.Text");
           this.LargeurBalise.Text = RM.GetString("LargeurBalise.Text");
           this.balise_precedente.Text = RM.GetString("balise_precedente.Text");
           this.buttonBaliseDefaut.Text = RM.GetString("buttonBaliseDefaut.Text");
           this.choixBibliBalise.Text = RM.GetString("choixBibliBalise.Text");
           this.changeSemantiqueBalise.Text = RM.GetString("changeSemantiqueBalise.Text");
           this.LargeurBalise.Text = RM.GetString("LargeurBalise.Text");
           this.HauteurBalise.Text = RM.GetString("HauteurBalise.Text");
           this.Selection.Text = RM.GetString("Selection.Text");
           this.buttonDeplacer.Text = RM.GetString("buttonDeplacer.Text");
           this.Supprimer.Text = RM.GetString("Supprimer.Text");
           this.checkBox1.Text = RM.GetString("checkBox1.Text");
           this.checkBox2.Text = RM.GetString("checkBox2.Text");
           this.checkBox3.Text = RM.GetString("checkBox3.Text");
           this.rechercheTC.Text = RM.GetString("rechercheTC.Text");
           this.radioButton2.Text = RM.GetString("radioButton2.Text");
           this.button8.Text = RM.GetString("button8.Text");
           this.rechercheAvancee.Text = RM.GetString("rechercheAvancee.Text");
           this.renommer_calque.Text = RM.GetString("renommer_calque.Text");
           this.toolStripStatusLabelMode.Text = RM.GetString("toolStripStatusLabelMode.Text");
           this.groupBox1.Text = RM.GetString("groupBox1.Text");
           this.newButton.ToolTipText = RM.GetString("newButton.ToolTipText");
           this.saveButton.ToolTipText = RM.GetString("saveButton.ToolTipText");
           this.openButton.ToolTipText = RM.GetString("openButton.ToolTipText");
           this.printButton.ToolTipText = RM.GetString("printButton.ToolTipText");
           this.undoButton.ToolTipText = RM.GetString("undoButton.ToolTipText");
           this.redoButton.ToolTipText = RM.GetString("redoButton.ToolTipText");
           this.imageButton.ToolTipText = RM.GetString("imageButton.ToolTipText");
           this.plusCalqueButton.ToolTipText = RM.GetString("plusCalqueButton.ToolTipText");
           this.userButton.ToolTipText = RM.GetString("userButton.ToolTipText");
           this.toolStripButton1.ToolTipText = RM.GetString("toolStripButton1.ToolTipText");
           this.LargeurBalise.Text = RM.GetString("LargeurBalise.Text");
           this.HauteurBalise.Text = RM.GetString("this.HauteurBalise.Text");
           this.labelKeyWord.Text = RM.GetString("labelKeyWord.Text");

        }

        /**
        * completeRefresh(Microsoft.Ink.Ink _ink , ArrayList _annotations)
        * 
        * @brief supprime le contenu du inkPicture pour tout réafficher selon le contenu du modèle
        * @param Microsoft.Ink.Ink _ink : le contenu du SDD en encre
        * @param ArrayList _annotations : le contenu du SDD en autres annotations
        * @return void
        */
        public void completeRefresh(Microsoft.Ink.Ink _ink , ArrayList _annotations , ArrayList textes){
           //mise à jour des scrollBars
            //p = splitContainer1.Panel1.AutoScrollPosition;
            
           // MessageBox.Show("p:   "+p.X.ToString() + "   " + p.Y.ToString());
            //definition des objets
            IEnumerator it;
            Graphics g = inkPicture1.CreateGraphics();
            double x;
            double y;

           

           Microsoft.Ink.Renderer rend = new Microsoft.Ink.Renderer();
           // render the combined strokes onto the PictureBox
           
           //MISE A JOUR DU INK
           inkPicture1.Ink.DeleteStrokes();
           inkPicture1.Refresh();
           //MessageBox.Show("coucou");
           Microsoft.Ink.Ink nouvelInk = _ink.Clone();
               if (_ink.Strokes.Count > 0)
               {
                   //_ink.Strokes.Rotate(angle, centre_image);
                   //Microsoft.Ink.DrawingAttributes da = new Microsoft.Ink.DrawingAttributes();
                  // da.Color = System.Drawing.Color.Red;
                   //_ink.Strokes.ModifyDrawingAttributes(da);

                   nouvelInk.Strokes.Scale(zoom, zoom);
                   inkPicture1.Ink.AddStrokesAtRectangle(nouvelInk.Strokes, nouvelInk.Strokes.GetBoundingBox());
                   inkPicture1.Refresh();
                   //MessageBox.Show("roucoucou");
               }

           //MISE A JOUR DES BALISES
               int i = 0; //variable de test
               it = _annotations.GetEnumerator();
               while (it.MoveNext())
               {
                   i++;
                   //Bitmap image_test = new Bitmap("C:/image_test.bmp");
                   Bitmap image_test =((Balise)it.Current).getIcone();
                   //Console.WriteLine("coordonnées de la balise en cours de rafraichissement : {0} {1}", ((Balise)it.Current).getPoint().X, ((Balise)it.Current).getPoint().Y);
                   //conversion echelles différents entre le inkpicture et l ecran : 
                   x=(((Balise)it.Current).getPoint().X/(25.4)-(image_test.Width/2))*(double)zoom;
                   y = (((Balise)it.Current).getPoint().Y / (25.4) - (image_test.Height / 2) )* (double)zoom;
                   g.DrawImage(new Bitmap(image_test,new Size((int)(image_test.Width*zoom),(int)(image_test.Height*zoom))),new Point((int)x, (int)y));
                   //Console.WriteLine("Ajoute de l'annotation dans totalRefresh {0}", i);
                }

               //MISE A JOUR DU TEXTE
               string texte_a_ajouter = "";
               it = textes.GetEnumerator();
               //Font police = new Font("Arial", 16);
               Font police;
               System.Drawing.Brush brush = new SolidBrush(couleur);
               //Console.WriteLine("tentative d'ajout de texte dans le graphics");

               //g.DrawString("texte_a_ajouter", police, brush, drawPoint);
               Font newPolice;
               while (it.MoveNext())
               { //ajout du texte au graphics
                   police= ((Modele.Texte)it.Current).getPolice();
                   newPolice = new Font(police.OriginalFontName, (int)(police.Size * zoom));
                   brush = new SolidBrush(((Modele.Texte)it.Current).getCouleur());
                   Console.WriteLine("police utilisé");
                   texte_a_ajouter = ((Texte)it.Current).getIcone();
                    //conversion echelles différents entre le inkpicture et l ecran : 
                    x = ((Texte)it.Current).getPoint().X *(double)zoom/ (25.4);
                    y = ((Texte)it.Current).getPoint().Y *(double)zoom/ (25.4);
                    police = ((Texte)it.Current).getPolice();
                    //Console.WriteLine("Affichage du texte suivante : {0}", texte_a_ajouter);
                    g.DrawString(texte_a_ajouter, newPolice, brush, new Point((int)x, (int)y));

               }

               maj_calque_courant();
               //MessageBox.Show("p- le retour:   " + p.X.ToString() + "   " + p.Y.ToString());
               updateScroll();
        }

        
        /**
        * completeRefresh(Microsoft.Ink.Ink _ink , ArrayList _annotations)
        * 
        * @brief lance un completeRefresh sur l'inkPicture
        * @return void
        */
        public void completeRefresh()
        {
            vue.completeRefresh();
        }

        
        public void changerGraphics(Microsoft.Ink.Ink _combinedInk , ArrayList _Combinedannotations , ArrayList _Combinedtextes)
        { //mise a jour du graphics (Calque non courant plus calques courant)
            /*
            Microsoft.Ink.Ink combinedInk = new Microsoft.Ink.Ink();
            Microsoft.Ink.Renderer rend = new Microsoft.Ink.Renderer();
            //Microsoft.Ink.Renderer rend2 = new Microsoft.Ink.Renderer();
            Microsoft.Ink.Strokes strokes;

            // copy strokes from the InkPictures into a single Ink object
            strokes = inkPicture3.Ink.Strokes;
            combinedInk.AddStrokesAtRectangle(strokes, strokes.GetBoundingBox());
            strokes = inkPicture1.Ink.Strokes;
            combinedInk.AddStrokesAtRectangle(strokes, strokes.GetBoundingBox());
             */

            Microsoft.Ink.Renderer rend = new Microsoft.Ink.Renderer();

            // render the combined strokes onto the PictureBox
            using (Graphics g = inkPicture1.CreateGraphics())
            {
                //g.DrawImage
                Point tampon;
                int i=0; //variable de test
                IEnumerator it = _Combinedannotations.GetEnumerator();
                while (it.MoveNext())
                {
                    i++;
                    //MessageBox.Show("chargement des balises dans le graphics");
                    tampon = new Point((int)(((Balise)it.Current).getPoint().X * zoom), (int)(((Balise)it.Current).getPoint().Y * zoom));
                   //conversion des echelles 
                    System.Drawing.Bitmap _image_balise=((Balise)it.Current).getIcone();
                    System.Drawing.Point _position = ((Balise)it.Current).getPoint();
                    double _x=_position.X*zoom/25.4;
                    double _y=_position.Y*zoom/25.4;

                    //correction du decalage
                    _x-=(_image_balise.Size.Width)/2;
                    _y-=(_image_balise.Size.Height)/2;

                    g.DrawImage(new Bitmap(_image_balise, new Size((int)(_image_balise.Width * zoom), (int)(_image_balise.Height * zoom))), new Point((int)_x, (int)_y));
                    //Console.WriteLine("Ajoute de la balise {0}", i);
                }
                //ecriture des textes
                it = _Combinedtextes.GetEnumerator();
                string texte_a_ajouter = "";
                //Font police = new Font("Arial", 16);
                Font police;
                Font newPolice;
                System.Drawing.Brush brush = new SolidBrush(Color.Black);
                i = 0;
                double x;
                double y;
                while(it.MoveNext()){
                    police=((Modele.Texte)it.Current).getPolice();
                    newPolice = new Font(police.OriginalFontName, (int)(police.Size*zoom));
                    brush = new SolidBrush(((Modele.Texte)it.Current).getCouleur());
                    i++;
                    //ajout du texte au graphics
                    texte_a_ajouter = ((Texte)it.Current).getIcone();
                    //conversion echelles différents entre le inkpicture et l ecran : 
                    x = ((Texte)it.Current).getPoint().X*(double)zoom / (25.4);
                    y = ((Texte)it.Current).getPoint().Y * (double)zoom / (25.4);
                    //Console.WriteLine("Affichage du texte suivante : {0}", texte_a_ajouter);
                    g.DrawString(texte_a_ajouter, newPolice, brush, new Point((int)x, (int)y));

                    //Console.WriteLine("Ajoute du texte {0} / numero {1}", ((Texte)it.Current).getIcone(), i);
                }
                Microsoft.Ink.Ink newInk = _combinedInk.Clone();
                    newInk.Strokes.Scale(zoom,zoom);
                //ecriture de l'encre
                _combinedInk.Strokes.Scale(zoom, zoom);
                rend.Draw(g, newInk.Strokes);
                //POINT A REPRENDRE

            }
           
            //inkPicture1.Update();


        } 

        /*
         * Capte et gère l'évènement CursorDown de l'inkpicture 
         * 
         */
        private void inkPicture1_CursorDown(object sender, Microsoft.Ink.InkCollectorCursorDownEventArgs e)
        {
            //MessageBox.Show("cursor down");
            // add extended property indicating the time the stroke started
            // STROKE_START_GUID is class level string via GUID generator
            //Console.WriteLine("Cursor Down");
            //   cursorDown = true;
            //  Console.WriteLine("Cursor Down fin");
           // MessageBox.Show("valeur de p dans cursor down:  " + p.ToString());
        }

        /*
         * Capte et gère l'évènement Click de l'inkpicture 
         * 
         */

        private void inkPicture1_Click(object sender, EventArgs e)
        {
            // add extended property indicating the time the stroke started
            // STROKE_START_GUID is class level string via GUID generator
            //Console.WriteLine("Click");
            //   cursorDown = true;
            //  Console.WriteLine("Cursor Down fin");
        }

        /*
         * Capte et gère l'évènement Stroke de l'inkpicture 
         * 
         */
        private void inkPicture1_Stroke(object sender, Microsoft.Ink.InkCollectorStrokeEventArgs e)
        {
            cursorDown= false;
            e.Stroke.DrawingAttributes.Color = couleur;
            e.Stroke.DrawingAttributes.Width = epaisseur;
            e.Stroke.DrawingAttributes.Transparency = transparence;
            e.Stroke.Scale(1/zoom, 1/zoom);
            Console.WriteLine("Transparence _stroke {0}", transparence);
           // e.Stroke.Rotate(-angle, centre_image);
            vue.ActionZoneDessin(e.Stroke);
            nbUndo++;
            undoButton.Enabled = true;
            redoButton.Enabled = false;
            vue.completeRefresh();
        }


        /*
         * Capte et gère l'évènement Click de l'item importer dans le menu Fichier 
         * 
         */

        private void importerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            String nom_fichier="";
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "bitmap files (*.bmp)|*.bmp|jpeg files (*.jpg)|*.jpg|png files (*.png)|*.png|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 3;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                nom_fichier = openFileDialog1.FileName;
            }
            if (nom_fichier != "")
            {
                image = Image.FromFile(nom_fichier);
                Bitmap fond = new Bitmap(image);
                inkPicture1.Size = image.Size;
                inkPicture1.BackgroundImage = fond;
                updateScroll();
                vue.ajouterDocument(fond);          
            }
            maj_centre_image();
        }

        private void ouvrirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            String nom_fichier = "";
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "All files (*.*)|*.*|UPX file (*.upx)|*.upx";
            //openFileDialog1.Filter = "All files (*.*)|*.*|PAN projects (*.pan)|*.pan";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if (Fenetre_de_confirmation.confirmation("L'ouverture va supprimer le projet courant. Etes vous sur de vouloir continuer ?"))
                {
                    this.vue.clear_encre();
                    this.vue.clear_balise();
                    this.vue.clear_texte();
                    nom_fichier = openFileDialog1.FileName;
                    image = vue.ouvrir(nom_fichier);
                    images_balises = vue.getBibliImages();
                    balises = vue.getBibliBalises();
                }


            }
            //rafraichissement total de la vue
            System.Drawing.Bitmap document_annote = vue.changer_vers_projet();
            if (document_annote == null)
            {
                document_annote = global::projet_PAN.Properties.Resources.image_fond_defaut;
            }

            inkPicture1.Size = document_annote.Size;
            inkPicture1.BackgroundImage = new Bitmap(document_annote, new Size((int)(document_annote.Size.Width * zoom), (int)(document_annote.Size.Height * zoom)));
            maj_centre_image();
            vue.completeRefresh();
            maj_checkBox();
            comboBoxAuthors.Items.Clear();
            comboBoxKeyWord.Items.Clear();
            vue.sendUtilisateur("", "");
            vue.addKeyWord("");
        }

        /*
         * Capte et gère l'évènement Click de l'item quitter dans le menu Fichier 
         * 
         */

        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            {
                DialogResult res = MessageBox.Show("Voulez vous vraiment quitter ? ", "Attention", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (res == DialogResult.Yes)
                {
                    Close();
                }
            }
        }


        /*
         * Capte et gère l'évènement Click de l'item imprimer dans le menu Fichier 
         * 
         */
        private void imprimerToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
            PrintDocument pd = new PrintDocument();

            Bitmap bmp = toImage();
            if (bmp != null)
            {

                pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);
                if (printDialog1.ShowDialog() == DialogResult.OK)
                {
                    pd.Print();
                }
            }


        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Bitmap bmp = toImage();
            if (bmp != null)
            {
                Image im = bmp;
                e.Graphics.DrawImage(im, new Point(0, 0));
            }
        }


        private Bitmap toImage()
        {
           if(image == null){
               MessageBox.Show("Vous n'avez pas inclue d'image");
               return null;         
            }else{
            return vue.toImage(image,zoom);
            }
            
        }


        /*
         * Capte et gère l'évènement Click de l'item nouveau dans le menu Fichier 
         * 
         */
        private void nouveauToolStripMenuItem_Click(object sender, EventArgs e)
        {
          
        }


        /*
         * Capte et gère l'évènement Click sur le label représentant le calque courant
         * 
         */
        private void label_Click(object sender, EventArgs e)
        {
            int calque_courant;
            Label lab = new Label();
            lab = (Label)sender;
            calque_courant =label_calques.IndexOf(lab);
            int numero_calque = 0;
            IEnumerator it=label_calques.GetEnumerator();
            //recherche du numero du calque correspondant au lab
            while(it.MoveNext() && !it.Current.Equals(lab)){
                numero_calque++;
                //Console.WriteLine("recherche du calque");
            }
            //Console.WriteLine("lab correspondant au calque {0}",numero_calque);
            vue.changerCalqueCourant(numero_calque+1); // +1 du à  la presence du document
            //permet une coherence entre le tableau de lab et la superposition des claques
            echanger_position_label(numero_calque, label_calques.Count - 1);
            maj_calque_courant();
            vue.completeRefresh(); // rafraichissement de la fenetre
        }
        /*
         * permet de définir le calque d'indice i calque courant
         * 
         * */
        private void changerCalqueCourant(int n)
        {
            for (int i = 0; i <= nbre_Calque; i++)
            {
                if (i != n)
                {
                    Label lab = label_calques[n];
                    lab.BackColor = SystemColors.ButtonHighlight;
                    
                }
            }
        }
        
      /*
       * Click sur le bouton correspondant à l'outil crayon
       * 
       * 
       * */

        private void button1_Click(object sender, EventArgs e)
        {
            maj_mode();
            outils = "crayon";
            mode = "dessin";
            vue.changerMode(new Controleur.ModeCrayon(couleur, epaisseur));
            setModeName();    
                       
        }

        /*
         * Click sur le bouton de choix de la couleur
         * provoque l'ouverture d'une fenetre de type ColorDialog
         * 
         * */
        private void buttonCouleur_Click(object sender, EventArgs e)
        {
            ColorDialog colorDialog1 = new ColorDialog();
            if (colorDialog1.ShowDialog() == DialogResult.OK)
            {
                buttonCouleur.BackColor = colorDialog1.Color;
                couleur = colorDialog1.Color;
                inkPicture1.DefaultDrawingAttributes.Color = colorDialog1.Color;

                //mise à jour dans le mode
                vue.setModeCouleur(colorDialog1.Color);
            }

        }

        private void buttonDeplacer_Click(object sender, EventArgs e)
        {

            mode = "édition";
            outils = "déplacement";
            vue.changerMode(new Controleur.ModeDeplacement(couleur, epaisseur));
            setModeName();    

        }

        private void button2_Click(object sender, EventArgs e)
        {
            maj_mode();
            inkPicture1.Cursor = Cursors.Hand;
            mode = "manipulation";
            outils="main";
            vue.changerMode(new Controleur.ModeMain(couleur, epaisseur));
            setModeName();          
        }

        private void Supprimer_Click(object sender, EventArgs e)
        {
            mode = "édition";
            outils = "supprimer";
            vue.changerMode(new Controleur.ModeSuppression(couleur, epaisseur));
            setModeName();    
        }



        private void Selection_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "édition";
            outils = "sélection";
            buttonDeplacer.Visible = true;
            vue.changerMode(new Controleur.ModeSelection(couleur, epaisseur));
            setModeName();    
        }

        private void tabDessin_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "dessin";
            outils = "crayon";
            vue.changerMode(new Controleur.ModeCrayon(couleur, epaisseur));
            setModeName();    
        }

        private void tabFormes_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "formes";
            outils = "rectangle";
            vue.changerMode(new Controleur.ModeRectangle(couleur, epaisseur));
            setModeName();    
        }

        private void buttonRectangle_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "formes";
            outils = "rectangle";
            vue.changerMode(new Controleur.ModeRectangle(couleur,epaisseur));
            setModeName();    
        }

        private void buttonEllipse_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "formes";
            outils = "ellipse";
            vue.changerMode(new Controleur.ModeEllipse(couleur, epaisseur));
            setModeName();    
        }

        private void buttonCercle_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "formes";
            outils = "cercle";
            vue.changerMode(new Controleur.ModeCercle(couleur, epaisseur));
            setModeName();    
        }

        private void buttonCarre_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "formes";
            outils = "carré";
            vue.changerMode(new Controleur.ModeCarre(couleur, epaisseur));
            setModeName();    
        }

        private void button9_Click(object sender, EventArgs e)
        {
            maj_mode();
            mode = "formes";
            outils = "trait";
            vue.changerMode(new Controleur.ModeTrait(couleur, epaisseur));
            setModeName();    
        }

        private void inkEdit1_TextChanged(object sender, EventArgs e)
        {

        }


     


        private void button1_Click_1(object sender, EventArgs e)
        {
            maj_mode();
            Form2 ecritureForm = new Form2();      
            mode = "dessin";
            outils = "écriture";
            vue.changerMode(new Controleur.ModeEcriture(couleur, epaisseur, ecritureForm));
            setModeName();    
                    
        }


        /*
         * Changement de la valeur du zoom
         * 
         * 
         * */
        private void numericUpDownZoom_ValueChanged(object sender, EventArgs e)
        {
            zoom = ((float)numericUpDownZoom.Value) / 100f;
            Matrix m=new Matrix();
            if (image != null)
            {
                Size taille = new Size((int)(image.Size.Width * zoom), (int)(image.Size.Height * zoom));
                Image monImage = inkPicture1.BackgroundImage;
                Bitmap nouvelleImage = new Bitmap(image, taille);
                inkPicture1.Size = taille;
                inkPicture1.BackgroundImage = nouvelleImage;
                updateScroll();
                
            }
            maj_centre_image();
            vue.completeRefresh(); // rafraichissement de la fenetre
        }

        public void echanger_position_label(int i, int j)
        {
            Label tampon = label_calques[i];
            label_calques[i] = label_calques[j];
            label_calques[j] = tampon;

            CheckBox temp = checkBox_calques[i];
            checkBox_calques[i] = checkBox_calques[j];
            checkBox_calques[j] = temp;
                    

        }
      


        public void modeMain(System.Drawing.Point[] tabPoints)
        {
            maj_mode();
            Point initial = (Point)tabPoints.GetValue(0);
            Point final = (Point)tabPoints.GetValue(tabPoints.Length - 1);
            
            int deplacementX = -(int)((final.X - initial.X)*zoom / 25.4);
            int deplacementY = -(int)((final.Y - initial.Y) *zoom/ 25.4);
            int x = hScrollBar1.Value + deplacementX;
            x = Math.Min(x, hScrollBar1.Maximum);
            x = Math.Max(x, hScrollBar1.Minimum);
            int y = vScrollBar1.Value + deplacementY;
            y = Math.Min(x, vScrollBar1.Maximum);
            y = Math.Max(x, vScrollBar1.Minimum);
            vScrollBar1.Value =y;
            hScrollBar1.Value = x;
            updateScroll();
            
        }

        private void updateScroll()
        {
            if (inkPicture1.BackgroundImage != null)
            {
                if (inkPicture1.BackgroundImage.Width > hScrollBar1.Width)
                {
                    hScrollBar1.Visible = true;
                    hScrollBar1.Maximum = inkPicture1.BackgroundImage.Width - hScrollBar1.Width;
                   /* hScrollBar1.LargeChange = hScrollBar1.Width;
                    hScrollBar1.SmallChange = (int)(hScrollBar1.Width / 10);*/
                }
                else
                {
                    
                    hScrollBar1.Visible = false;
                }
                if (inkPicture1.BackgroundImage.Height > vScrollBar1.Height)
                {
                    vScrollBar1.Visible = true;
                    vScrollBar1.Maximum = inkPicture1.BackgroundImage.Height - vScrollBar1.Height;
                   /* vScrollBar1.LargeChange = vScrollBar1.Height;
                    vScrollBar1.SmallChange = (int)(vScrollBar1.Height / 10);*/
                }
                else
                {
                    
                    vScrollBar1.Visible = false;
                }
            }
            else
            {
                hScrollBar1.Value = 0;
                hScrollBar1.Visible = false;
                vScrollBar1.Value = 0;
                vScrollBar1.Visible = false;

            }

          
        }

        private void button3_Click(object sender, EventArgs e)
        {
        }

        private void tabManipulation_Click(object sender, EventArgs e)
        {
            maj_mode();
        }
        /*
         * changement de l'épaisseur du trait
         * 
         * 
         * 
         * */
        private void numericUpDownEpaisseur_ValueChanged(object sender, EventArgs e)
        {
            epaisseur = (int)numericUpDownEpaisseur.Value;
            trackBarEpaisseur.Value = (int)numericUpDownEpaisseur.Value;

            //mise à jour dans le mode
            vue.setModeEpaisseur((int)numericUpDownEpaisseur.Value);

            inkPicture1.DefaultDrawingAttributes.Width = epaisseur;

        }

        private void trackBarEpaisseur_Scroll(object sender, EventArgs e)
        {
            epaisseur = (int)numericUpDownEpaisseur.Value;
            numericUpDownEpaisseur.Value = trackBarEpaisseur.Value;

            //mise à jour dans le mode
            vue.setModeEpaisseur((int)numericUpDownEpaisseur.Value);

            inkPicture1.DefaultDrawingAttributes.Width = epaisseur;
        }

        /************************************/

        /*gestion des evenement checkBox 
         * activation et desactivation de la visibilité 
         */
        private void check_CheckedChanged(object sender, EventArgs e)
        {


            CheckBox checkBox = new CheckBox();
            checkBox = (CheckBox)sender;
            int numero_calque = 0;
            IEnumerator it = checkBox_calques.GetEnumerator();
            //recherche du numero du calque correspondant au lab
                //recherche du numero du calque correspondant au lab
                while (it.MoveNext() && !it.Current.Equals(checkBox))
                {
                    numero_calque++;
                    //Console.WriteLine("recherche du calque");
                }
                //Console.WriteLine("changement de la visibilité du calque {0}", numero_calque);
                vue.changeVisibility(numero_calque + 1); // +1 du à  la presence du document

                vue.completeRefresh(); // rafraichissement de la fenetre
           
            
        }

        private void enregisteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.Filter = "UPX  (*.upx)|*.upx";
            //saveFileDialog1.Filter = "PAN  (*.pan)|*.pan";
            saveFileDialog1.ShowDialog();

            string nom_fichier;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                nom_fichier = saveFileDialog1.FileName;
                vue.setBibliImages(images_balises);
                vue.setBibliBalises(balises);
                vue.sauver(nom_fichier);
                MessageBox.Show("sauvegarde effectuée");
            }
        }

    
    
        /**
        * @brief undoButton_Click
        * @brief Click sur le bouton undo
        * @param object sender : l'expéditeur de l'événement
        * @param EventArgs e : l'évènement
        * @return void
        */
        private void undoButton_Click(object sender, EventArgs e)
        {
           // Console.WriteLine("nbUndo : {0}", nbUndo);
            //Console.WriteLine("nbRedo : {0}", nbRedo);    

            int nb_undo = vue.undo(1);
            ///// /!\ unique annulation pour l'instant

            nbRedo = nbRedo+nbUndo - nb_undo;
            nbUndo = nb_undo;

            //Console.WriteLine("nbUndo : {0}", nbUndo);
            //Console.WriteLine("nbRedo : {0}", nbRedo);                
            if (nbUndo < 1)
            {
                undoButton.Enabled = false;
            }

            else
            {
                undoButton.Enabled = true;
            }

            if (nbRedo > 0)
            {
                redoButton.Enabled = true;
            }


        }

        /**
        * @brief undoButton_Click
        * @brief Click sur le bouton undo
        * @param object sender : l'expéditeur de l'événement
        * @param EventArgs e : l'évènement
        * @return void
        */
        private void redoButton_Click(object sender, EventArgs e)
        {
            //Console.WriteLine("nbUndo 1 : {0}", nbUndo);
            //Console.WriteLine("nbRedo 1 : {0}", nbRedo);         
            
            int nb_redo = vue.redo(1);
            nbUndo = nbUndo+nbRedo - nb_redo;
            nbRedo = nb_redo;
           /* Console.WriteLine("nb_redo : {0}", nb_redo);

            Console.WriteLine("nbUndo 2 : {0}", nbUndo);
            Console.WriteLine("nbRedo 2 : {0}", nbRedo);  
            */
            if (nb_redo < 1)
            {
                redoButton.Enabled = false;
            }

            else
            {
                redoButton.Enabled = true;
            }

            ///// /!\ un seul redo pour l'instant
        }

        private void clearToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
        }
        /*
         * Mise à jour du calque courant:
         * -le label est surligné
         * -la checkBox est éffacée pour le calque courant
         * 
         */
        
        
        private void maj_calque_courant()
        { 
            Label lab=null;
             CheckBox check=null;
            for (int i = 0; i <=nbre_Calque; i++)
            {
               lab=(Label)label_calques[i];
               check=(CheckBox)checkBox_calques[i];
                if (i <nbre_Calque)
                {
                    lab.BackColor = System.Drawing.SystemColors.ButtonHighlight;
                    check.Visible = true;
                }
                else
                {
                    lab.BackColor = System.Drawing.Color.BurlyWood;
                    check.Visible = false;
                }
            }


        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
        
            zoom = ((float)trackBar1.Value)/100f;
            Matrix m = new Matrix();
            if (image != null)
            {
                Size taille = new Size((int)(image.Size.Width * zoom), (int)(image.Size.Height * zoom));
                Image monImage = inkPicture1.BackgroundImage;
                Bitmap nouvelleImage = new Bitmap(image, taille);
                inkPicture1.Size = taille;
                inkPicture1.BackgroundImage = nouvelleImage;
          
                
            }
            updateScroll();
            vue.completeRefresh(); // rafraichissement de la fenetre
        }

        //Raccourci nom de l'utilisateur
        private void userButton_Click(object sender, EventArgs e)
        {
            Form formUtilisateur = new FormUtilisateur(vue);
        }

        //raccourci importation d'image
        private void imageButton_Click(object sender, EventArgs e)
        {
            importerToolStripMenuItem_Click(sender, e);
        }

        //Raccourci impression
        private void printButton_Click(object sender, EventArgs e)
        {
            imprimerToolStripMenuItem_Click(sender,e);
        }

        //raccourci ajout de calque
        private void plusCalqueButton_Click(object sender, EventArgs e)
        {
            ajouterNouveauCalqueToolStripMenuItem_Click(sender, e);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            maj_mode();
            //suppression des resultat d'une pseudo recherche précédente 
            indice_resultat_recherche = 0;
            resultat_recherche.Clear();
            button1.BackColor = System.Drawing.Color.Tomato;
            button5.BackColor = System.Drawing.Color.Tomato;

            // recuperation des parametres de recherche
            string mot_cle = "";
            string auteur = "";
            mot_cle = comboBoxKeyWord.Text;
            auteur = comboBoxAuthors.Text;

            bool recherche_dans_balise = checkBox1.Checked;
            bool recherche_dans_encre = checkBox2.Checked;
            bool recherche_dans_texte = checkBox3.Checked;

            //Console.WriteLine("Lancement de la recherche mot clé reconnu : {0} / balise {1} / encre {2} / texte {3 } ", mot_cle, recherche_dans_balise, recherche_dans_encre, recherche_dans_texte);

            //selection de l'endroit de la recherche
            bool rechercheCalqueCourant = !rechercheTC.Checked;
               

              
                
                //lancement de la recherche 
            resultat_recherche = vue.lancer_recherche(recherche_dans_balise,
                                                      recherche_dans_encre,
                                                      recherche_dans_texte,
                                                      mot_cle,auteur,
                                                      rechercheCalqueCourant);
            traitement_resultat_recherche();
        }

        //traitement du resultat de la recherche
        public void traitement_resultat_recherche()
        {
            //Traitement du resultat
            //Console.WriteLine("nombre d'objets trouvés : {0} ", resultat_recherche.Count);
            maj_indicateur_recherche();
            if (resultat_recherche.Count > 0)
            {
                button5.BackColor = System.Drawing.Color.LightGreen;//code couleur
                se_localiser(resultat_recherche[0]);
            }
            vue.completeRefresh();
        }



        //recherche d'une balise via la bibliothèque de balises
        private void rechercheAvancee_Click(object sender, EventArgs e)
        {
            int index_recherche = DialogueRechercheAvancee.selectionnerBalise(balises, images_balises);
            if (index_recherche != -1) //l'utilisateur a bien selectionné une balise
            {
                //configuration des parametres de recherche
                bool recherche_dans_balise=true;
                bool recherche_dans_encre=false;
                bool recherche_dans_texte=false;
                Semantique sem = balises[index_recherche].getSemantique();
                bool rechercheCalqueCourant =!rechercheTC.Checked;

                resultat_recherche = vue.lancer_recherche(recherche_dans_balise,
                                                      recherche_dans_encre,
                                                      recherche_dans_texte,
                                                      sem,
                                                      rechercheCalqueCourant);
                traitement_resultat_recherche();

            }

        }


        //passer à l'objet precédent dans une recherche
        private void button5_Click(object sender, EventArgs e)
        {
            
            if (indice_resultat_recherche < resultat_recherche.Count-1)
            {
                indice_resultat_recherche++;
                se_localiser(resultat_recherche[indice_resultat_recherche]);
                if (indice_resultat_recherche == resultat_recherche.Count - 1)
                {
                    button5.BackColor = System.Drawing.Color.Tomato; //code couleur
                }
                if (resultat_recherche.Count > 0)
                {
                    button1.BackColor = System.Drawing.Color.LightGreen;
                }
            }
            maj_indicateur_recherche();
            vue.completeRefresh();

        }
        //passer à l'objet suivant dans une recherche
        private void button1_Click_2(object sender, EventArgs e)
        {
            if (indice_resultat_recherche > 0)
            {
                indice_resultat_recherche--;
                se_localiser(resultat_recherche[indice_resultat_recherche]);
                if (indice_resultat_recherche == 0)
                {
                    button1.BackColor = System.Drawing.Color.Tomato; //code couleur
                }
                if (resultat_recherche.Count > 0)
                {
                    button5.BackColor = System.Drawing.Color.LightGreen;
                }
            }
            maj_indicateur_recherche();

        }
        //mise a jour de l'indicateur de recherche (label2)
        private void maj_indicateur_recherche()
        {
            if (resultat_recherche.Count == 0)
            {
                label2.Text = ("Pas de résultat trouvé");
            }
            else
            {
                label2.Text = ("Affichage du résultat " + (indice_resultat_recherche + 1) + "/" + resultat_recherche.Count + " résultat(s) trouvé(s)");
            }
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

 


        private void maj_centre_image()
        {
            if (image != null)
            {
                int width = (int)(inkPicture1.BackgroundImage.Size.Width * 25.4 / 2);
                int height = (int)(inkPicture1.BackgroundImage.Size.Height * 25.4 / 2);
                centre_image = new Point(width, height);
            }
        }

        private void se_localiser(System.Drawing.Point point)
        {
            int x = (int)(point.X *zoom/ 25.4);
            int y = (int)(point.Y *zoom/ 25.4);
            //MessageBox.Show("scroll:   " + hScrollBar1.Value.ToString() + "  " + vScrollBar1.Value.ToString());
            if (x - (int)(hScrollBar1.Width / 2) >0)
            {
                if (x - (int)(hScrollBar1.Width / 2) < hScrollBar1.Maximum)
                {
                    hScrollBar1.Value = x - (int)(hScrollBar1.Width / 2);
                }else{
                    hScrollBar1.Value=hScrollBar1.Maximum;
                }
            }
            else
            {
                hScrollBar1.Value = 0;
            }
            if (y - (int)(vScrollBar1.Height / 2) > 0)
            {
                if(y - (int)(vScrollBar1.Height / 2)<vScrollBar1.Value)
                {
                vScrollBar1.Value = y - (int)(vScrollBar1.Height / 2);
                }else
                {
                     vScrollBar1.Value=vScrollBar1.Maximum;
                }

            }
            else
            {
                vScrollBar1.Value = 0;
            }

     
        }

        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
        {
            inkPicture1.Top = 0;
            inkPicture1.Left = 0;
            updateScroll();
        }

        private void barreOutils_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void inkEdit1_TextChanged_1(object sender, EventArgs e)
        {

        }

        private void maj_mode()
        {
                buttonDeplacer.Visible = false;
                inkPicture1.Cursor=Cursors.Default;
                //p.X = splitContainer1.Panel1.AutoScrollPosition.X;
                //p.Y = splitContainer1.Panel1.AutoScrollPosition.Y;
            

        }

        private void tabPage1_Click(object sender, EventArgs e)
        {
            maj_mode();
        }

        private void supprimerEncreToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Fenetre_de_confirmation.confirmation("Voulez vous supprimez toutes les annotations de type encre présentes dans le calque courant ?"))
            {
                this.vue.clear_encre();
            }
        }

        private void supprimerBaliseToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Fenetre_de_confirmation.confirmation("Voulez vous supprimez toutes les annotations de type balise présentes dans le calque courant ?"))
            {
                this.vue.clear_balise();
            }
        }

        private void supprimerTexteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Fenetre_de_confirmation.confirmation("Voulez vous supprimez toutes les annotations de type texte présentes dans le calque courant ?"))
            {
                this.vue.clear_texte();
            }
        }

        private void toutSupprimerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if(Fenetre_de_confirmation.confirmation("Voulez vous supprimez toutes les annotations présentes dans le calque courant ?")){
                this.vue.clear_encre();
                this.vue.clear_balise();
                this.vue.clear_texte();
            }
        }

        //switch vers le blocNote
        private void blocnoteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Drawing.Bitmap document_annote = vue.changer_vers_blocnote();
            if (document_annote == null)
            {
                document_annote =global::projet_PAN.Properties.Resources.image_fond_defaut;
            }

            inkPicture1.Size = document_annote.Size;
            inkPicture1.BackgroundImage = document_annote;
           // splitContainer1.Panel1.AutoScrollMinSize = document_annote.Size;
            //MessageBox.Show("autoscroll:  " + document_annote.Size.ToString());
            maj_centre_image();
            vue.completeRefresh();
            maj_checkBox();
        }

        //switch vers le projet
        private void projetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Drawing.Bitmap document_annote = vue.changer_vers_projet();
            if (document_annote == null)
            {
                document_annote = global::projet_PAN.Properties.Resources.image_fond_defaut;
            }

            inkPicture1.Size = document_annote.Size;
            inkPicture1.BackgroundImage = new Bitmap(document_annote, new Size((int)(document_annote.Size.Width * zoom), (int)(document_annote.Size.Height * zoom)));
            //splitContainer1.Panel1.AutoScrollMinSize = document_annote.Size;
            //MessageBox.Show("autoscroll:  " + document_annote.Size.ToString());
            maj_centre_image();
            vue.completeRefresh();
            maj_checkBox();
        }

        private void tabBalises_Click(object sender, EventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        /************
         * BALISES  *
         ************/

        private void buttonBalise_Click(object sender, EventArgs e)
        {
            indexe_balise = ((indexe_balise+1) % balises.Count); //passage à label_calques balise suivante
            //Console.WriteLine("Passage au mode {0} {1}", mode, outils);
            //System.Drawing.Bitmap _image_balise = mode_balise.getImageBalise();

            maj_chargement_balise(balises[indexe_balise]);

            setModeName();

        }

        private void balise_precedente_Click(object sender, EventArgs e)
        {

            indexe_balise = ((indexe_balise - 1) % balises.Count); //passage à label_calques balise suivante
            maj_chargement_balise(balises[indexe_balise]);
            setModeName();
        }

        private void changeSemantiqueBalise_Click(object sender, EventArgs e)
        {
            string _dialogue="";
            _dialogue=Form3.InputBox();
            if(_dialogue!=""){
                Modele.Semantique sem=balises[indexe_balise].getSemantique();
                sem.setSignification(_dialogue);
                balises[indexe_balise].setSemantique(sem);
                vue.addKeyWord(_dialogue);
                // mise à jour de "l'outils" utilisé dans le mode balise
                outils = _dialogue;
            }
            maj_chargement_balise(balises[indexe_balise]);
        }
        private void button3_Click_1(object sender, EventArgs e)
        {
            //recupération de la nouvelle image pour les balises

            System.Drawing.Image image_importee;

            String nom_fichier = "";
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "bitmap files (*.bmp)|*.bmp|jpeg files (*.jpg)|*.jpg|png files (*.png)|*.png|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 3;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                nom_fichier = openFileDialog1.FileName;
            }

            if (nom_fichier != "")
            {
                image_importee = Image.FromFile(nom_fichier);
                Bitmap new_image_balise = new Bitmap(image_importee);
                //précaution sur la taille de l'image
                new_image_balise = verification_taille_image(new_image_balise);

                //ajout de la nouvelle balise à l'ensemble des balises
                images_balises.Add(new_image_balise);
                Modele.Semantique sem = new Semantique("balise ajoutée", prenom, nom);
                balises.Add(new Modele.Balise(sem, new_image_balise));
                indexe_balise++;
                //passage dans le mode balise
                //mode_balise = new Controleur.ModeBalise(couleur, epaisseur, balises[indexe_balise]);

            }
            else
            {
                // mode_balise = new Controleur.ModeBalise(couleur, epaisseur,balises[indexe_balise]);
            }

            //mise a jour 
            maj_chargement_balise(balises[indexe_balise]);

            setModeName();
        }

        private void change_image_balise_Click(object sender, EventArgs e)
        {
           
        }

        //redimensionne l'image si hors gabarit 
        private System.Drawing.Bitmap verification_taille_image(System.Drawing.Bitmap _image_balise)
        {
            int hauteur = _image_balise.Height;
            int largeur = _image_balise.Width;
            int hauteur_max =(int)numericUpDownHauteurBalise.Maximum;
            int largeur_max =(int)numericUpDownLargueurBalise.Maximum;
            System.Drawing.Bitmap image_res=_image_balise;
            //test sur les bornes des numericUpDown
            if (hauteur > hauteur_max || largeur > largeur_max)
            {

                System.Drawing.Size taille_de_redimensionnement = new System.Drawing.Size(Math.Min(largeur_max, largeur),
                                                                   Math.Min(hauteur_max, hauteur));
                //redimensionnement
                image_res = new System.Drawing.Bitmap(_image_balise, taille_de_redimensionnement);
            }
            return image_res;
        }

        private void maj_chargement_balise(Modele.Balise _balise)
        {

            maj_mode();
            mode = "balise";
            outils = "balise_attention";
            Controleur.ModeBalise mode_balise = new Controleur.ModeBalise(couleur, epaisseur, balises[indexe_balise]);
            vue.changerMode(mode_balise);

            System.Drawing.Bitmap _image_balise = _balise.getIcone();
            //affichage dans le picturebox
            pictureBoxBalise.Size = _image_balise.Size;
            pictureBoxBalise.BackgroundImage = _image_balise;

            //mise a jour de l'attribut image
            //image_balise = _image_balise;

            //mise a jour du panel d'outil (taille);
            int hauteur_balise= _image_balise.Height;
            int largeur_balise= _image_balise.Width;
            numericUpDownHauteurBalise.Value = hauteur_balise;
            numericUpDownLargueurBalise.Value = largeur_balise;

            label_semantique.Text = _balise.getSemantique().ToString();
            outils = _balise.getSemantique().getSignification();
        }


        private void numericUpDownHauteurBalise_ValueChanged(object sender, EventArgs e)
        {
            redimensionnement_balise("via hauteur");

        }
        private void numericUpDown3_ValueChanged(object sender, EventArgs e)
        {
            redimensionnement_balise("via longeur");
        }


        private void redimensionnement_balise(string raison)
        {
            
            int largeur = (int)numericUpDownLargueurBalise.Value;
            int hauteur = (int)numericUpDownHauteurBalise.Value;

            if (checkBoxProportion.Checked)
            {
                //recuperation des proportions 
                System.Drawing.Image _image = pictureBoxBalise.BackgroundImage;
                if (_image != null)
                {
                    System.Drawing.Size _taille = _image.Size;
                    double proportion =( _taille.Height * 1.0)  / ( _taille.Width * 1.0); // hauteur / largeur
                    Console.WriteLine("proportion : {0} ", proportion);
                    if (raison == "via hauteur")
                    {
                        largeur = (int)(hauteur / proportion);
                    }
                    else
                    {
                        hauteur = (int)(largeur * proportion);
                    }
                }

            }





            if (largeur != 0 && hauteur != 0)
            {
                //Console.WriteLine("Redimensionnement de la balise");
                //redimensionnement

                System.Drawing.Size dimensions = new System.Drawing.Size(largeur, hauteur);

                //creation de la balises avec l'icone redimensionné
                System.Drawing.Bitmap new_image_balise = new System.Drawing.Bitmap(images_balises[indexe_balise], dimensions);
                Modele.Balise new_balise = new Modele.Balise(balises[indexe_balise]);
                new_balise.setIcone(new_image_balise);
                
               // mise à jours dans label_calques bibliothèques de balises
                balises[indexe_balise] = new_balise;

                Controleur.ModeBalise mode_balise = new Controleur.ModeBalise(couleur, epaisseur, new_balise);
                //changement de mode avec la balise redimensionnée
                vue.changerMode(mode_balise);

                maj_chargement_balise(new_balise);
                /*
                System.Drawing.Image _image_balise = mode_balise.getImageBalise();
                pictureBoxBalise.Size = _image_balise.Size;
                pictureBoxBalise.BackgroundImage = _image_balise;
                 * */
            }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //Va afficher le répertoire courant 
            //Console.WriteLine(Environment.CurrentDirectory);
            System.Diagnostics.Process.Start("..\\..\\Aide en Ligne\\Aideenligne.chm");


        }

        private void trackBarOpacite_Scroll(object sender, EventArgs e)
        {
            numericUpDownOpacite.Value = trackBarOpacite.Value;
            transparence = (byte)(255 - 2.55 * (byte)numericUpDownOpacite.Value);

            //mise à jour dans le mode
            vue.setModeOpacite((int)transparence);

            inkPicture1.DefaultDrawingAttributes.Transparency = transparence;
        }

        private void numericUpDownOpacite_ValueChanged(object sender, EventArgs e)
        {
            trackBarOpacite.Value = (int)numericUpDownOpacite.Value;
            transparence = (byte)(255 - 2.55 * (byte)numericUpDownOpacite.Value);

            //mise à jour dans le mode
            vue.setModeOpacite((int)transparence);

            inkPicture1.DefaultDrawingAttributes.Transparency = transparence;
        }

        private void nouveauProjetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Fenetre_de_confirmation.confirmation("Voulez vous charger un nouveau projet ?  Attention le projet courant ne sera perdu si aucune sauvegarde n'a été effectuée auparavant !"))
            {
                vue.ouvertureNouveauProjet();
                inkPicture1.BackgroundImage = null; //rafraichissement de l'image importée
                vue.completeRefresh();
                maj_checkBox();
            }
        }

        private void supprimerToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (Fenetre_de_confirmation.confirmation("voulez vous supprimer le calque courant ?")) //ouvre une fenetre de confirmation
            {
                vue.supprimerCalqueCourant();
                vue.completeRefresh();
                maj_checkBox();
            }
        }

        /*
         * Mise à jour des checkbox 
         * Rechargement du contexte dans le cas d'une communtation projet <->BlocNote ou suppression de calque
         */
        private void maj_checkBox()
        {
            List<bool> etat_checkBox = vue.getEtatsCalques();
            List<string> nom_calque = vue.getNoms();
            //Console.WriteLine("maj_checkBox , nombre de calques captés : {0}" , etat_checkBox.Count);
            IEnumerator it;
            IEnumerator it2;
            IEnumerator it_nom;
            //creation des checkbox
            nbre_Calque = 0;

            groupBox1.Controls.Clear();
            checkBox_calques.Clear();
            label_calques.Clear();


            
          
            //iterateur sur le tableau de bool
            it = etat_checkBox.GetEnumerator();
            it2 = etat_checkBox.GetEnumerator();
            it_nom = nom_calque.GetEnumerator();

            CheckBox check;
            Label lab;
            int loc=21;
            //suppression des label par defaut
            checkBoxCalque0.Visible = false;
            label0.Visible = false;

            it2.MoveNext(); //permet d'iterer et s'arrete avant le dernier element

                            while (it.MoveNext() && it2.MoveNext())
                            {
                                it_nom.MoveNext(); //iterateur sur le noms des claques 

                                //Console.WriteLine("creation d'un checkBox");

                                //creation d'une nouvelle check box
                                check = new CheckBox();
                                check.AutoSize = true;
                                check.BackColor = System.Drawing.Color.White;
                                loc = (nbre_Calque+1) * 20 + 1;
                                check.Location = new System.Drawing.Point(16, loc);
                                //check.Name = "checkBoxCalque" + nbre;
                                check.Name = "checkBoxCalque " + nbre_Calque;
                                check.Size = new System.Drawing.Size(82, 21);
                                check.TabIndex = 1;
                                check.UseVisualStyleBackColor = false;
                                check.Checked = (bool)it.Current;
                                check.CheckedChanged += new EventHandler(check_CheckedChanged);
                                checkBox_calques.Add(check);

                                //creation d'un nouveau label associé
                                lab = new Label();
                                lab.AutoSize = true;
                                lab.Location = new System.Drawing.Point(58, loc);
                                lab.Name = "label" + nbre_Calque;
                                lab.Size = new System.Drawing.Size(60, 17);
                                lab.TabIndex = 2;
                                //lab.Text = "Calque " + nbre_Calque;
                                lab.Text = (string)it_nom.Current;
                                lab.Click += new System.EventHandler(label_Click);


                                groupBox1.Controls.Add(check);
                                groupBox1.Controls.Add(lab);

                                label_calques.Add(lab);

                                

                                nbre_Calque++;

                            }



                    //gestion du calque courant
                    //checkBoxCourant
                            check = new CheckBox();
                            check.AutoSize = true;
                            check.BackColor = System.Drawing.Color.White;
                            loc = (nbre_Calque+1) * 20 + 1;
                            check.Location = new System.Drawing.Point(16, loc);
                            //check.Name = "checkBoxCalque" + nbre;
                            check.Name = "checkBoxCalque " + nbre_Calque;
                            check.Size = new System.Drawing.Size(82, 21);
                            check.TabIndex = 1;
                            check.UseVisualStyleBackColor = false;
                            check.Checked = true;
                            check.CheckedChanged += new EventHandler(check_CheckedChanged);
                            check.Visible = false;
                            checkBox_calques.Add(check);
                            groupBox1.Controls.Add(check);



                            //label courant
                            lab = new Label();
                            lab.AutoSize = true;
                            lab.Location = new System.Drawing.Point(58, loc);
                            lab.Name = "label" + nbre_Calque;
                            lab.Size = new System.Drawing.Size(60, 17);
                            lab.TabIndex = 2;
                            //lab.Text = "Calque " + nbre_Calque;
                            it_nom.MoveNext();
                            lab.Text = (string)it_nom.Current;
                            lab.BackColor = System.Drawing.Color.BurlyWood;
                            lab.Click += new System.EventHandler(label_Click);

                   
                    
                    groupBox1.Controls.Add(lab);
                    label_calques.Add(lab);

                    splitContainer2.Panel2.AutoScrollMinSize = new Size(0, loc + 21);

                    //Console.WriteLine("nombre de checkBox : {0} ", checkBox_calques.Count);

                    //Console.WriteLine("nombre de labelCalques : {0} ", label_calques.Count);
          
            


        }

        private void Form1_Load(object sender, EventArgs e)
        {
            vue.completeRefresh();
        }
        private void exporterToolStripMenuItem_Click(object sender, EventArgs e)
        {

            Bitmap bmp = toImage();
            if (bmp != null)
            {

                // Create new SaveFileDialog object
                SaveFileDialog DialogSave = new SaveFileDialog();

                // Default file extension
                DialogSave.DefaultExt = "txt";

                // Available file extensions
                DialogSave.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|PNG Image|*.png";

                // Adds a extension if the user does not
                DialogSave.AddExtension = true;

                // Restores the selected directory, next time
                DialogSave.RestoreDirectory = true;

                // Dialog title
                DialogSave.Title = "Où voulez-vous exporter cette image?";

                // Startup directory
                DialogSave.InitialDirectory = @"C:/";

                // Show the dialog and process the result
                if (DialogSave.ShowDialog() == DialogResult.OK)
                {
                    DialogSave.Dispose();
                    bmp.Save(DialogSave.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                }

                


                
                if (DialogSave.FileName != "")
                {
                    bmp.Save(DialogSave.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                }
                Console.WriteLine("affichage du repertoire : {0} ", DialogSave.InitialDirectory);

            }
        }



        //renommage des calques
        private void renommer_calque_Click(object sender, EventArgs e)
        {
            //System.Windows.Forms.Form renommer_calque=new Form3(vue);

            resultat_dialogue_renommage(Form3.InputBox());
        }


        private void resultat_dialogue_renommage(string s)
        {
            //Console.WriteLine("retour de la boite de dialogue : {0}", s);
            //renommage du calque courant
            if (s != "")
            {
                vue.setNom(s);
            }
            maj_checkBox();

        }

        private void rechercheTC_CheckedChanged(object sender, EventArgs e)
        {   
        }

        private void rechercheCC_CheckedChanged(object sender, EventArgs e)
        { 
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void rafraichirLaVueToolStripMenuItem_Click(object sender, EventArgs e)
        {
            vue.completeRefresh();
        }

        //choix d'une balise
        private void choixBibliBalise_Click(object sender, EventArgs e)
        {
            int tampon = DialogueRechercheAvancee.selectionnerBalise(balises,images_balises);

            if (tampon != -1)
            {
                indexe_balise = tampon;
                maj_chargement_balise(balises[indexe_balise]);
            }
        }

        private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            inkPicture1.Top = -vScrollBar1.Value;
        }

        private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            inkPicture1.Left = -hScrollBar1.Value;
        }

        private void vScrollBar1_ValueChanged(object sender, EventArgs e)
        {
            inkPicture1.Top = -vScrollBar1.Value;
        }
        private void hScrollBar1_ValueChanged(object sender, EventArgs e)
        {
            inkPicture1.Left = -hScrollBar1.Value;
        }
        private void vScrollBar1_SizeChanged(object sender, EventArgs e)
        {
            if (image != null)
            {
                vScrollBar1.Maximum = inkPicture1.BackgroundImage.Height - vScrollBar1.Height;
            }
        }
        private void hScrollBar1_SizeChanged(object sender, EventArgs e)
        {
            if (image != null)
            {
                hScrollBar1.Maximum = inkPicture1.BackgroundImage.Width - hScrollBar1.Width;
            }
        }

        //importation d'un ensemble de balises
        private void importerUnEnsembleDiconesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Drawing.Image image_importee;
            string[] noms_fichiers=new string[0];
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "bitmap files (*.bmp)|*.bmp|jpeg files (*.jpg)|*.jpg|png files (*.png)|*.png|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 3;
            openFileDialog1.Multiselect = true;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                noms_fichiers = openFileDialog1.FileNames;
            }

            if (noms_fichiers.Length > 0)
            {
                for (int i = 0; i < noms_fichiers.Length; i++)//parcours du resultat (ensemble de noms)
                {
                    image_importee = Image.FromFile(noms_fichiers[i]);
                    Bitmap new_image_balise = new Bitmap(image_importee);
                    //précaution sur la taille de l'image
                    new_image_balise = verification_taille_image(new_image_balise);

                    //ajout de la nouvelle balise à l'ensemble des balises
                    
                    Modele.Semantique sem = new Semantique("balise ajoutée", prenom, nom);
                    images_balises.Add(new_image_balise);
                    balises.Add(new Modele.Balise(sem, new_image_balise));
                    indexe_balise++;
                }
            }
        }

        /**
        * @brief setDrawingAttributes(Microsoft.Ink.DrawingAttributes _att)
        * @brief met à jour le DefaultDrawingAttributes du InkPicture1 à l'aide de _att
        * @param Microsoft.Ink.DrawingAttributes _att
        * @return void
        */
        internal void setDrawingAttributes(Microsoft.Ink.DrawingAttributes _att)
        {
            //couleur

            couleur = _att.Color;
            inkPicture1.DefaultDrawingAttributes.Color = _att.Color;
            buttonCouleur.BackColor = _att.Color;

            
            //épaisseur
            epaisseur = (int)_att.Width;
            inkPicture1.DefaultDrawingAttributes.Width = _att.Width;
            trackBarEpaisseur.Value = (int)_att.Width;
            numericUpDownEpaisseur.Value = (int)_att.Width;
            
            
            //opacité

            numericUpDownOpacite.Value = 100 - _att.Transparency*100/255;
            trackBarOpacite.Value = 100 - _att.Transparency * 100 / 255;
            transparence = (byte)(255 - trackBarOpacite.Value);

            inkPicture1.DefaultDrawingAttributes.Transparency = (byte)(255 - trackBarOpacite.Value);
        
           
         }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void droitierToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
        }

        private void gaucherToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Thread.CurrentThread.CurrentUICulture = EnglishCulture;
            AfficherTexte();
        }

        private void editerToolStripMenuItem_Click(object sender, EventArgs e)
        {
          editionBibliotheque.lancerBibliotheque(balises, images_balises, vue);
        }

        private void raToolStripMenuItem_Click(object sender, EventArgs e)
        {
            vue.completeRefresh();
        }

        private void rafraichissementToolStripMenuItem_Click(object sender, EventArgs e)
        {
            vue.completeRefresh();
        }

        private void francaisToolStripMenuItem_Click(object sender, EventArgs e)
        {
            francaisToolStripMenuItem.Checked= true;
            anglaisToolStripMenuItem.Checked = false;
            Thread.CurrentThread.CurrentUICulture = FrenchCulture;
            AfficherTexte();
        }

        private void anglaisToolStripMenuItem_Click(object sender, EventArgs e)
        {
            francaisToolStripMenuItem.Checked = false;
            anglaisToolStripMenuItem.Checked = true;
            Thread.CurrentThread.CurrentUICulture = EnglishCulture;
            AfficherTexte();
        }

        private void ajouterNouveauCalqueToolStripMenuItem_Click(object sender, EventArgs e)
        {
            nbre_Calque++;
            String nbre = nbre_Calque.ToString();

            CheckBox check = new CheckBox();
            check.AutoSize = true;
            check.BackColor = System.Drawing.Color.White;
            int loc = (nbre_Calque + 1) * 20 + 1;
            check.Location = new System.Drawing.Point(16, loc);
            check.Name = "checkBoxCalque" + nbre;
            check.Size = new System.Drawing.Size(82, 21);
            check.TabIndex = 1;
            check.UseVisualStyleBackColor = false;
            check.Checked = true;
            check.CheckedChanged += new EventHandler(check_CheckedChanged);
            checkBox_calques.Add(check);

            Label lab = new Label();
            lab.AutoSize = true;
            lab.Location = new System.Drawing.Point(58, loc);
            lab.Name = "label" + nbre;
            lab.Size = new System.Drawing.Size(60, 17);
            lab.TabIndex = 2;
            lab.Text = "Calque " + nbre;
            lab.Click += new System.EventHandler(label_Click);
            //calque_courant = nbre_Calque;

            groupBox1.Controls.Add(check);
            groupBox1.Controls.Add(lab);

            label_calques.Add(lab);

            splitContainer2.Panel2.AutoScrollMinSize = new Size(0, loc + 21);
            maj_calque_courant();
            vue.creeCalque();

            //ATTENTION DOUBLE MISE A JOUR DES CHECK BOX 
            maj_checkBox(); //mise a jour plus générique
        }

        private void enregistrerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            enregisteToolStripMenuItem_Click(sender,e);
        }

        private void newButton_Click(object sender, EventArgs e)
        {
            nouveauProjetToolStripMenuItem_Click(sender, e);
        }

        private void saveButton_Click(object sender, EventArgs e)
        {
            enregisteToolStripMenuItem_Click(sender,e);
        }

        private void openButton_Click(object sender, EventArgs e)
        {
            ouvrirToolStripMenuItem_Click(sender,e);
        }



        private void aProposToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FenetreAPropos f = new FenetreAPropos();
            f.Show();
        }

        private void optionsUtilisateurToolStripMenuItem_Click(object sender, EventArgs e)
        {
            userButton_Click(sender,e);
        }

        private void anglaisToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            francaisToolStripMenuItem.Checked = false;
            anglaisToolStripMenuItem.Checked = true;
            Thread.CurrentThread.CurrentUICulture = EnglishCulture;
            AfficherTexte();
        }

        private void checkBoxProportion_CheckedChanged(object sender, EventArgs e)
        {
           // numericUpDownHauteurBalise.Visible = !numericUpDownLargueurBalise.Visible;
            numericUpDownHauteurBalise.Enabled = !numericUpDownHauteurBalise.Enabled;
        }

        public void setComboBoxAuteurs(ArrayList _listeAuteurs)
        {
            Console.WriteLine("Passage pas setComboBoxAuteurs : {0}",_listeAuteurs.Count);
            comboBoxAuthors.Items.Clear();
            comboBoxAuthors.Items.AddRange(_listeAuteurs.ToArray());
        }

        public void setComboBoxKeyWords(ArrayList _listeKeyWordsList)
        {
            comboBoxKeyWord.Items.Clear();
            comboBoxKeyWord.Items.AddRange(_listeKeyWordsList.ToArray());
        }

        private void labelUtilisateur_Click(object sender, EventArgs e)
        {
            userButton_Click(sender, e);
        }

        private void toolStripButtonRefresh_Click(object sender, EventArgs e)
        {
            vue.completeRefresh();
        }


    }
}
